#ifndef USERSETTINGSWIDGET_H
#define USERSETTINGSWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QGroupBox>
#include <QCheckBox>
#include <QPushButton>
#include <QLabel>
#include <QMessageBox>
#include <QTimer>
#include "models.h"
#include "datamanager.h"

// 使用命名空间
using namespace RestaurantSystem;

/**
 * @brief 用户设置管理组件（简化版）
 * 
 * 提供基本的用户设置功能：
 * - 通知设置
 * - 自动登录设置
 * - 数据管理（清除缓存等）
 * - 1024*600分辨率优化
 */
class UserSettingsWidget : public QWidget
{
    Q_OBJECT

public:
    explicit UserSettingsWidget(QWidget *parent = nullptr);
    ~UserSettingsWidget();

    /**
     * @brief 设置当前用户ID
     * @param userId 用户ID
     */
    void setUserId(const QString& userId);
    
    /**
     * @brief 加载用户设置
     */
    void loadUserSettings();
    
    /**
     * @brief 保存用户设置
     */
    void saveUserSettings();
    
    /**
     * @brief 重置到默认设置
     */
    void resetToDefaults();

signals:
    /**
     * @brief 设置更新信号
     * @param userId 用户ID
     * @param settings 更新的设置
     */
    void settingsUpdated(const QString& userId, const UserSettings& settings);
    
    /**
     * @brief 数据清理请求信号
     */
    void dataClearRequested();

public slots:
    /**
     * @brief 处理设置保存成功
     */
    void onSettingsSaved();
    
    /**
     * @brief 处理操作错误
     * @param errorMessage 错误信息
     */
    void onOperationError(const QString& errorMessage);

private slots:
    /**
     * @brief 保存按钮点击槽
     */
    void onSaveButtonClicked();
    
    /**
     * @brief 重置按钮点击槽
     */
    void onResetButtonClicked();
    
    /**
     * @brief 清除缓存按钮点击槽
     */
    void onClearCacheClicked();
    
    /**
     * @brief 清除历史按钮点击槽
     */
    void onClearHistoryClicked();
    
    /**
     * @brief 设置变化槽
     */
    void onSettingsChanged();

private:
    /**
     * @brief 初始化界面
     */
    void initializeUI();
    
    /**
     * @brief 创建通知设置区域
     */
    void createNotificationArea();
    

    
    /**
     * @brief 创建数据管理区域
     */
    void createDataManagementArea();
    
    /**
     * @brief 创建操作按钮区域
     */
    void createActionArea();
    
    /**
     * @brief 应用样式表
     */
    void applyStyleSheet();
    
    /**
     * @brief 更新界面状态
     */
    void updateUIState();
    
    /**
     * @brief 显示操作结果
     * @param message 结果信息
     * @param success 是否成功
     */
    void showOperationResult(const QString& message, bool success = true);
    
    /**
     * @brief 获取当前设置
     * @return 当前界面的设置
     */
    UserSettings getCurrentSettings() const;
    
    /**
     * @brief 应用设置到界面
     * @param settings 要应用的设置
     */
    void applySettingsToUI(const UserSettings& settings);
    
    /**
     * @brief 检查设置是否有变化
     * @return 是否有未保存的变化
     */
    bool hasUnsavedChanges() const;
    
    /**
     * @brief 更新缓存信息显示
     */
    void updateCacheInfo();

private:
    // 主布局
    QVBoxLayout* m_mainLayout;
    
    // 通知设置区域
    QGroupBox* m_notificationGroup;
    QVBoxLayout* m_notificationLayout;
    QCheckBox* m_enableNotificationsCheck;
    

    
    // 数据管理区域
    QGroupBox* m_dataGroup;
    QVBoxLayout* m_dataLayout;
    QPushButton* m_clearCacheButton;
    QPushButton* m_clearHistoryButton;
    QLabel* m_cacheInfoLabel;
    
    // 操作按钮区域
    QGroupBox* m_actionGroup;
    QHBoxLayout* m_actionLayout;
    QPushButton* m_saveButton;
    QPushButton* m_resetButton;
    
    // 状态标签
    QLabel* m_statusLabel;
    
    // 数据
    QString m_currentUserId;
    UserSettings m_currentSettings;
    UserSettings m_originalSettings; // 用于检测变化
    
    // 业务对象
    DataManager* m_dataManager;
    
    // 状态标志
    bool m_isInitialized;
    bool m_isLoading;
    
    // 常量
    static const int STATUS_DISPLAY_MS = 3000; // 状态显示3秒
};

#endif // USERSETTINGSWIDGET_H
